package com.banmoon.algorithm.order;

import java.util.Arrays;
import java.util.Random;

/**
 * 希尔排序
 */
public class Demo04 {

    public static void main(String[] args) {
        int length = 10;
        int[] arr = new int[length];
        Random random = new Random();
        for (int i = 0; i < length; i++)
            arr[i] = random.nextInt(length);
        System.out.println("排序前的数组：" + Arrays.toString(arr));
        int[] sortArr = sort(arr);
        System.out.println("排序后的数组：" + Arrays.toString(sortArr));
    }

    public static int[] sort(int[] arr){
        // 定义步长
        int step = arr.length/2;
        // 遍历步长，直到为1后执行最后一次
        while (step>0){
            // 从步长开始，遍历数组后的元素
            for (int i = step; i < arr.length; i++) {
                // 遍历同组内的元素，通过步长，从后向前遍历
                for (int j = i-step; j >= 0; j-=step) {
                    if(arr[j]>arr[j+step]){
                        int temp = arr[j];
                        arr[j] = arr[j+step];
                        arr[j+step] = temp;
                    }
                }
            }
            // 对步长进行二分缩短
            step /= 2;
        }
        return arr;
    }

}
